package io.netty.util.concurrent;
//具体什么算是任务成功，什么是失败，当然根据不同的情况来进行设置了
//Promise接口就相当于提供了一个口子来设置成功与失败
//为什么会有tryXXX方法？
//因为规定成功和失败结果只能设置一次，不能重复设置，重复设置就会抛异常，
//所以可以尝试，如果已经设置过了，就返回失败即可。
public interface Promise<V> extends Future<V> {

    Promise<V> setSuccess(V result);

    boolean trySuccess(V result);

    Promise<V> setFailure(Throwable cause);

    boolean tryFailure(Throwable cause);

    boolean setUncancellable();


    //=======以下为重写的方法=======//


    @Override
    Promise<V> addListener(GenericFutureListener<? extends Future<? super V>> listener);

    @Override
    Promise<V> addListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

    @Override
    Promise<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener);

    @Override
    Promise<V> removeListeners(GenericFutureListener<? extends Future<? super V>>... listeners);

    @Override
    Promise<V> await() throws InterruptedException;

    @Override
    Promise<V> awaitUninterruptibly();

    @Override
    Promise<V> sync() throws InterruptedException;

    @Override
    Promise<V> syncUninterruptibly();
}
